Day 21 함수(메소드)
Day21 21단계 2023-11-10
1. 뒤에서 5등 위로
- 내 풀이 : Arrays의 sort()로 먼저 오름차순 정렬 후, copyOfRange(num_list, int start, int end)로 앞에 5개 숫자를 제외한 배열을 만들었다.
import java.util.*;
class Solution {
public int[] solution(int[] num_list) {
Arrays.sort(num_list);
return Arrays.copyOfRange(num_list, 5, num_list.length);
}
}
- 다른 사람 풀이 : Stream에서 sorted()로 오름차순 정렬 후, skip(5)로 요소 5개를 제외하였다.
return Arrays.stream(num_list).sorted().skip(5).toArray();
2. 전국 대회 선발 고사
- 내 풀이 : attendance에서 true의 개수를 구해서 새 2차원 배열의 크기로 정한다.
- 2차원 배열에는 rank에서 attendance가 true인 요소와 인덱스 값을 각각 0번과 1번 위치에 저장한다.
- Arrays.sort()를 이용해 첫 요소(즉 순위)를 오름차순 정렬하고, 그 중 3개의 값을 문제에서 주어진 계산법에 넣어 답을 구한다.
import java.util.*;
class Solution {
public int solution(int[] rank, boolean[] attendance) {
int size = 0;
for(boolean b : attendance) {
if (b) size++;
}
int[][] arr = new int[size][2];
int index = 0;
for(int i = 0; i < rank.length; i++) {
if (attendance[i]) {
arr[index][0] = rank[i];
arr[index++][1] = i;
}
}
Arrays.sort(arr, (a, b) -> a[0] - b[0]);
return 10000*arr[0][1] + 100*arr[1][1] + arr[2][1];
}
}
- 다른 사람 풀이들 https://school.programmers.co.kr/learn/courses/30/lessons/181851/solution_groups?language=java
- Stream : IntStream 생성 후 attendance의 요소가 true인 것만 filter()
- 그 후 sorted()에서 rank 배열의 요소값으로 비교(오름차순)
- limt()으로 3개의 요소만 남긴 뒤 reduce()로 순차적 연산 진행
- PriorityQueue : 생성자에서 rank요소의 오름차순 정렬 이후, attendance의 요소가 true인 경우에만 queue에 요소 추가 후 결과 연산 진행
- TreeMap : attendance의 요소가 true인 경우에만 rank의 요소를 추가. TreeMap이므로 오름차순 정렬이 자동으로 이루어진다.
- tree의 keySet()을 순환하면서 3개의 요소만 List에 저장 후 연산 진행
- 그 외에도 ArrayList, HashMap을 사용한 풀이도 존재한다.